package view;

import javax.swing.JPanel;
import javax.swing.GroupLayout;
import javax.swing.GroupLayout.Alignment;

import java.awt.Component;
import java.awt.Dimension;
import javax.swing.JLabel;
import java.awt.Font;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.sql.SQLException;
import java.util.Hashtable;

import javax.swing.JMenuBar;
import javax.swing.JOptionPane;
import javax.swing.JScrollPane;
import javax.swing.SwingConstants;
import javax.swing.JButton;
import javax.swing.LayoutStyle.ComponentPlacement;
import javax.swing.JTable;

import model.*;
import controller.*;
import javax.swing.JCheckBox;
import javax.swing.JMenu;
import javax.swing.JMenuItem;
import javax.swing.JTextField;

public class ReservaBuscar extends JPanel {
	private static final long serialVersionUID = 1L;
	private Hashtable<Integer,Reserva>reservas=new Hashtable<Integer,Reserva>();
	private JTextField reservaBuscarUsuariosBox = new JTextField();
	private JLabel reservaListaTit;
	private JLabel reservaListaVacia;
	private JTable resultadoBusqueda;
	private JScrollPane resultadoBusquedaPane;
	private JScrollPane resultadoBusquedaPaneMenu = new JScrollPane();
	private JMenuBar menu=new JMenuBar();
	private JCheckBox reservaBuscarVencidasCheck = new JCheckBox("Vencidas/Finalizadas?");
	private final JMenu mnGestinReservas = new JMenu("Gesti\u00F3n reservas");
	private final JMenuItem mntmEliminarReserva = new JMenuItem("Eliminar reserva");
	private final JMenuItem mntmModificarReserva = new JMenuItem("Modificar reserva");
	private JLabel userNameLbl;
	private Persona persona=null;

	/**
	 * Create the panel.
	 */
	public ReservaBuscar(final Persona persona) {
		this.persona=persona;
		setSize(new Dimension(800, 400));
		
		JLabel reservaBuscarTit = new JLabel("Buscador de Reservas");
		reservaBuscarTit.setAlignmentX(Component.CENTER_ALIGNMENT);
		reservaBuscarTit.setHorizontalAlignment(SwingConstants.CENTER);
		reservaBuscarTit.setHorizontalTextPosition(SwingConstants.CENTER);
		reservaBuscarTit.setFont(new Font("Tahoma", Font.BOLD, 15));
		
		JLabel reservaBuscarLabel = new JLabel("Usuario:");
		reservaBuscarLabel.setHorizontalAlignment(SwingConstants.RIGHT);

		JButton reservaBuscarBtn = new JButton("Buscar");
		reservaBuscarBtn.setMinimumSize(new Dimension(120, 23));
		reservaBuscarBtn.setMaximumSize(new Dimension(120, 23));
		reservaBuscarBtn.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent arg0) {
				try{
					if(persona.getClass().getName().contains("PersonaEmpleado")){
						reservas=ReservaController.getReservaController().buscar(resultadoBusqueda,(String)reservaBuscarUsuariosBox.getText(),reservaBuscarVencidasCheck);
					}else{
						reservas=ReservaController.getReservaController().buscar(resultadoBusqueda,userNameLbl.getText(),reservaBuscarVencidasCheck);
					}
					reservaListaTit.setVisible(true);
					if(reservas != null){
						if(reservas.size() > 0){
						resultadoBusqueda.setVisible(true);
						resultadoBusquedaPane.setVisible(true);
						resultadoBusquedaPaneMenu.setVisible(true);
						reservaListaVacia.setVisible(false);
						}else{
							resultadoBusqueda.setVisible(false);
							resultadoBusquedaPane.setVisible(false);
							resultadoBusquedaPaneMenu.setVisible(false);
							reservaListaVacia.setVisible(true);
						}
					}else{
						resultadoBusqueda.setVisible(false);
						resultadoBusquedaPane.setVisible(false);
						reservaListaVacia.setVisible(true);
					}
				}catch(Exception e){
					e.getMessage();
				}
			}
		});

		resultadoBusquedaPaneMenu.setViewportView(menu);
		
		menu.add(mnGestinReservas);
		
		mnGestinReservas.add(mntmEliminarReserva);
		mntmEliminarReserva.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent arg0) {
				if(resultadoBusqueda.getSelectedRow()==-1){
					JOptionPane.showMessageDialog(null,
							"Seleccione una fila de la tabla.",
							"Error",
							JOptionPane.ERROR_MESSAGE);
					return;
				}
				Reserva reserva=reservas.get(resultadoBusqueda.getSelectedRow());
				try{
					ReservaController.getReservaController().eliminar(reserva);
					actualizar();
				}catch(SQLException e){}
			}
		});
		mntmModificarReserva.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent arg0) {
				if(resultadoBusqueda.getSelectedRow()==-1){
					JOptionPane.showMessageDialog(null,
							"Seleccione una fila de la tabla.",
							"Error",
							JOptionPane.ERROR_MESSAGE);
					return;
				}
				Reserva reserva=reservas.get(resultadoBusqueda.getSelectedRow());
				ReservaModificarPopUp popUp=new ReservaModificarPopUp(reserva);
				JOptionPane.showMessageDialog(null, popUp, "Modificar Reserva", JOptionPane.PLAIN_MESSAGE);
				try {
					ReservaController.getReservaController().modificar(reserva, popUp);
				} catch (SQLException e) {
					// TODO Auto-generated catch block
					e.printStackTrace();
				}
				actualizar();
			}
		});
		
		mnGestinReservas.add(mntmModificarReserva);
		
		resultadoBusquedaPaneMenu.setVisible(false);
		reservaListaTit = new JLabel("Listado de Reservas");
		reservaListaTit.setMinimumSize(new Dimension(92, 14));
		reservaListaTit.setMaximumSize(new Dimension(92, 14));
		reservaListaTit.setHorizontalTextPosition(SwingConstants.CENTER);
		reservaListaTit.setHorizontalAlignment(SwingConstants.CENTER);
		reservaListaTit.setFont(new Font("Tahoma", Font.BOLD, 15));
		reservaListaTit.setAlignmentX(Component.CENTER_ALIGNMENT);
		reservaListaTit.setVisible(false);
		
		reservaListaVacia = new JLabel("No se ha encontrado ninguna reserva que coincida con esa palabra clave.");
		reservaListaVacia.setHorizontalAlignment(SwingConstants.CENTER);
		reservaListaVacia.setVisible(false);
		resultadoBusquedaPane = new JScrollPane();
		resultadoBusquedaPane.setVisible(false);
		
		userNameLbl = new JLabel(persona.getUser());
		userNameLbl.setVisible(false);
		//Carga de usuarios
		if(persona.getClass().getName().contains("PersonaUsuario")){
			userNameLbl.setVisible(true);
			reservaBuscarUsuariosBox.setVisible(false);
		}
		
		GroupLayout groupLayout = new GroupLayout(this);
		groupLayout.setHorizontalGroup(
			groupLayout.createParallelGroup(Alignment.TRAILING)
				.addComponent(reservaListaTit, GroupLayout.DEFAULT_SIZE, 800, Short.MAX_VALUE)
				.addGroup(groupLayout.createSequentialGroup()
					.addComponent(reservaListaVacia, GroupLayout.DEFAULT_SIZE, 790, Short.MAX_VALUE)
					.addContainerGap())
				.addGroup(groupLayout.createSequentialGroup()
					.addContainerGap()
					.addComponent(reservaBuscarTit, GroupLayout.DEFAULT_SIZE, 780, Short.MAX_VALUE)
					.addContainerGap())
				.addGroup(groupLayout.createSequentialGroup()
					.addGap(29)
					.addComponent(resultadoBusquedaPaneMenu, GroupLayout.DEFAULT_SIZE, 761, Short.MAX_VALUE)
					.addContainerGap())
				.addGroup(groupLayout.createSequentialGroup()
					.addGap(29)
					.addComponent(resultadoBusquedaPane, GroupLayout.DEFAULT_SIZE, 761, Short.MAX_VALUE)
					.addContainerGap())
				.addGroup(groupLayout.createSequentialGroup()
					.addContainerGap(139, Short.MAX_VALUE)
					.addComponent(reservaBuscarLabel, GroupLayout.PREFERRED_SIZE, 98, GroupLayout.PREFERRED_SIZE)
					.addPreferredGap(ComponentPlacement.RELATED)
					.addComponent(userNameLbl)
					.addPreferredGap(ComponentPlacement.RELATED)
					.addComponent(reservaBuscarUsuariosBox, GroupLayout.PREFERRED_SIZE, 229, GroupLayout.PREFERRED_SIZE)
					.addPreferredGap(ComponentPlacement.RELATED)
					.addComponent(reservaBuscarVencidasCheck)
					.addPreferredGap(ComponentPlacement.RELATED)
					.addComponent(reservaBuscarBtn, GroupLayout.PREFERRED_SIZE, GroupLayout.DEFAULT_SIZE, GroupLayout.PREFERRED_SIZE)
					.addGap(71))
		);
		groupLayout.setVerticalGroup(
			groupLayout.createParallelGroup(Alignment.LEADING)
				.addGroup(groupLayout.createSequentialGroup()
					.addContainerGap()
					.addComponent(reservaBuscarTit, GroupLayout.PREFERRED_SIZE, 19, GroupLayout.PREFERRED_SIZE)
					.addPreferredGap(ComponentPlacement.UNRELATED)
					.addGroup(groupLayout.createParallelGroup(Alignment.BASELINE)
						.addComponent(reservaBuscarLabel)
						.addComponent(reservaBuscarUsuariosBox, GroupLayout.PREFERRED_SIZE, GroupLayout.DEFAULT_SIZE, GroupLayout.PREFERRED_SIZE)
						.addComponent(reservaBuscarVencidasCheck)
						.addComponent(reservaBuscarBtn, GroupLayout.PREFERRED_SIZE, GroupLayout.DEFAULT_SIZE, GroupLayout.PREFERRED_SIZE)
						.addComponent(userNameLbl))
					.addGap(13)
					.addComponent(reservaListaTit, GroupLayout.PREFERRED_SIZE, 19, GroupLayout.PREFERRED_SIZE)
					.addPreferredGap(ComponentPlacement.RELATED)
					.addComponent(reservaListaVacia)
					.addPreferredGap(ComponentPlacement.RELATED, GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
					.addComponent(resultadoBusquedaPaneMenu, GroupLayout.PREFERRED_SIZE, GroupLayout.DEFAULT_SIZE, GroupLayout.PREFERRED_SIZE)
					.addPreferredGap(ComponentPlacement.RELATED)
					.addComponent(resultadoBusquedaPane, GroupLayout.PREFERRED_SIZE, 249, GroupLayout.PREFERRED_SIZE))
		);
		
		resultadoBusqueda = new JTable();
		resultadoBusquedaPane.setViewportView(resultadoBusqueda);
		resultadoBusqueda.setVisible(false);
		setLayout(groupLayout);

	}
	private void actualizar(){
		if(persona.getClass().getName().contains("PersonaEmpleado")){
			reservas=ReservaController.getReservaController().buscar(resultadoBusqueda,(String)reservaBuscarUsuariosBox.getText(),reservaBuscarVencidasCheck);
		}else{
			reservas=ReservaController.getReservaController().buscar(resultadoBusqueda,userNameLbl.getText(),reservaBuscarVencidasCheck);
		}
		if(reservas != null){
			if(reservas.size() > 0){
			resultadoBusqueda.setVisible(true);
			resultadoBusquedaPane.setVisible(true);
			resultadoBusquedaPaneMenu.setVisible(true);
			reservaListaVacia.setVisible(false);
			}else{
				resultadoBusqueda.setVisible(false);
				resultadoBusquedaPane.setVisible(false);
				resultadoBusquedaPaneMenu.setVisible(false);
				reservaListaVacia.setVisible(true);
			}
		}else{
			resultadoBusqueda.setVisible(false);
			resultadoBusquedaPane.setVisible(false);
			resultadoBusquedaPaneMenu.setVisible(false);
			reservaListaVacia.setVisible(true);
		}
	}
}
